/**
 * 工具函数集合
 * @file 通用工具函数
 */

/**
 * 格式化日期为指定格式
 * @param {Date} date 日期对象
 * @param {string} format 格式字符串，如 'YYYY-MM-DD hh:mm:ss'
 * @returns {string} 格式化后的日期字符串
 */
const formatTime = (date, format = 'YYYY-MM-DD hh:mm:ss') => {
  if (!date || !(date instanceof Date)) {
    date = new Date();
  }
  
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const hour = date.getHours();
  const minute = date.getMinutes();
  const second = date.getSeconds();

  const formatNumber = n => {
    n = n.toString();
    return n[1] ? n : `0${n}`;
  };

  return format
    .replace('YYYY', year)
    .replace('MM', formatNumber(month))
    .replace('DD', formatNumber(day))
    .replace('hh', formatNumber(hour))
    .replace('mm', formatNumber(minute))
    .replace('ss', formatNumber(second));
};

/**
 * 检查是否在水逆期间
 * @returns {boolean} 是否在水逆期
 * @description 这里只是一个简单的模拟实现，实际应用中应当使用真实的天文数据
 */
const isMercuryRetrograde = () => {
  // 随机返回一个结果，实际应用中应获取真实天文数据
  return Math.random() > 0.7;
};

/**
 * 计算星象运势
 * @param {Object} userInfo 用户信息
 * @returns {Object} 运势分析结果
 */
const calculateFortune = (userInfo) => {
  try {
    const isRetrograde = isMercuryRetrograde();
    const today = new Date();
    
    return {
      date: formatTime(today, 'YYYY年MM月DD日'),
      isRetrograde,
      fortuneIndex: Math.floor(Math.random() * 100),
      suggestion: isRetrograde ? 
        '水星逆行期间，宜谨慎行事，避免做重大决定和签订合同。' : 
        '水星顺行，宜积极进取，可以开展重要工作和社交活动。'
    };
  } catch (error) {
    console.error('计算运势错误:', error);
    return {
      date: formatTime(new Date(), 'YYYY年MM月DD日'),
      isRetrograde: false,
      fortuneIndex: 50,
      suggestion: '计算异常，请重试。'
    };
  }
};

module.exports = {
  formatTime,
  isMercuryRetrograde,
  calculateFortune
}; 